/************************************************************************************************************************************************
 *   Copyright (C) 2008 by Denjs                                                                                                                *
 *   dplsoft@pisem.net                                                                                                                          *
 *   http://qdroid.berlios.de                                                                                                                   *
 * -----------------------------------------------------------------------                                                                      *
 *   This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or (at your option) any later version.                                      *
 *   This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of             *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.                                 *
 *   You should have received a copy of the GNU General Public License along with this program; if not, write to the                            *
 *   Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                                                  *
 * -------------------------------------------------------------------------------------------------------------------------------------------- *
 *     Эта программа является свободным программным обеспечением; вы можете распространять её и/или модифицировать в соответствии с лицензией   *
 *   GNU General Public License  (УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU) версии 2.0 или более поздней - на ваш выбор.                         *
 *     Эта программа распространяется  в надежде что она будет вам полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, подразумеваемых или явных; без обещаний *
 *   полезности или применимости в конкретных условиях. Вы используете  данное ПО на свой страх и риск и сами полностью несете                  *
 *   ответственность за последствия. См. GNU General Public License (УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU).                                  *
 *     Вы должны получить копию GNU General Public License (УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU)с данным ПО; Если этого не случилось,       *
 *   обратитесь в Фонд Свободного Программного Обеспечения :                                                                                    *
 *   Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                                                  *
 * -------------------------------------------------------------------------------------------------------------------------------------------  *
 * Замечания для территории России: в соответствии с ГК РФ часть 4, начиная использовать данную программу (исполняемые файлы или исходные       *
 * тексты) вы автоматически соглашаетесь с данной лицензией.
 ************************************************************************************************************************************************/

#ifndef T_QDROID_H
#define T_QDROID_H

#include <QtCore>
#include <QtGlobal>
#include <QtScript>
// # // include <QStringListModel>

//#include "./classes/t_DroidGui.h"
//#include "./classes/t_ObjectRegistry.h"
//#include "./classes/t_FunctionRegistry.h"  <-- TO DELETE!
#include "./classes/t_FunctionRegistryItem.h"// <-- to rename to ScriptFile or else
#include "./classes/t_QDLibManager.h"
#include "./classes/stdInReader.h"
#include "./bots/t_BaseBot.h"
#include "./bots/t_FileList.h"
#include "./bots/t_FileBot.h"
#include "./shared_headers/global_qs_functions.h"

const QString QDroid_WorkProfile_GUI="GUI";
const QString QDroid_WorkProfile_SHELL="SHELL";

/*
 Основной класс - ядро - диспетчер который управляет остальными объектами
*/
class t_QDroid : public QObject
{
    Q_OBJECT

    public slots:
		int init(QStringList argList);//слот на который мы получим сигнал в момент начала цикла событий для инициации.
		//int init2();//test slot
		
		void std_out_resend(QString Message);
		void std_out_resend_HTML(QString Message);
		void script_to_execute(QStringList ScriptSource);
		void signalHandlerException_rcv( const QScriptValue & exception );
		
		int script_list_item_activated ( const QModelIndex & index );
		int script_list_item_clicked ( const QModelIndex & index );
		int script_list_item_doubleClicked( const QModelIndex & index );

		//2009.09.14 STDIN|STDOUT|STDERR
		//это поучатели - два от внешних объектов системы, один от внутреннего шлюза к каналам
	//	void rcv_to_std_err(QByteArray Message); //--> подключен к SLOT stdReader.send_StdErr
	//	void rcv_to_std_out(QByteArray Message); //--> подключен к SLOT stdReader.send_StdOut
	//	void rcv_from_std_in(QByteArray Message);// -> к нему подключен SIGNAL stdReader.received_StdIn
	//	void rcv_openStdReader();// -> запустить обработку потоков ввода
	//	void rcv_closeStdReader();// -> остановить обработку потоков ввода-вывода
	//	void slot_stdInStream_Closed();
	public:
		t_QDroid(QObject *parent =0);
		~t_QDroid();
	//	QScriptValue qdroid_print_function2(QScriptContext *context, QScriptEngine *engine);
	//	QScriptValue qdroid_exit_function2(QScriptContext *context, QScriptEngine *engine);
		int DebugLevel;
		
		t_FunctionRegistryItem 	*FunctionRegItem;//tmp!
		bool useGui;//признак того что мы работаем в гуе.
		QString platformVersion;//строка версии 
	private:
		
//		t_DroidGui 		*DroidGui; // TODO: delete!!!!
		QScriptEngine 		*QSEngine;	// скриптовый движок. один на всех :)
		//t_ObjectRegistry 	*ObjectReg;	//репозитарий объектов (внешних поставщиков объектов)
/*TODO:delete*/	//t_FunctionRegistry 	*FunctionReg;//репозитарий подключенных функций
		t_BaseBot		*BaseBot;
		t_QDLibManager		*QDLibManager;

/*TODO:delete*/	//QListView		*ScriptListObject;
		//QStringListModel	*StringListModel;
		//QTextEdit		*ScriptDescriptionObject;

/*TODO:delete*/	//QTextEdit 		*StdOutObject;//tmp!

/*TODO:delete*/	//QPushButton *Button1Object;//tmp!

//		int connect_to_regitem(int RegItemIndex);
		QStringList prerpocess_script(QStringList _ScriptSource); //активация препроцессора кода.

		QString WorkProfile;

	signals:
		//это извещатели - по направлению к объъектам системы, один для внутреннего шлюза к каналам
	//	void send_to_std_err(QByteArray Message); //--> подключен к SLOT stdReader.send_StdErr
	//	void send_to_std_out(QByteArray Message); //--> подключен к SLOT stdReader.send_StdOut
	//	void send_from_std_in(QByteArray Message);// -> к нему подключен SIGNAL stdReader.received_StdIn
	//	void sig_stdInStream_Closed();
		
		//void std_out_HTML(QString Message);
public:
	stdInReader stdReader;
//private :
};

#endif // T_QDROID_H
